package generic.Erased;


import utils.Log;

import java.util.*;

/**
 * java泛型是使用 擦除 来实现的。这意味着当你在使用泛型时， 任何具体的类型信息都被擦除了，你唯一知道的就是你在使用一个对象。
 * 因此 List<String> 和 List<Integer> 在运行时事实上是相同的类型。 这两种形式都被擦除成他们的原生类型，即 list
 * 理解擦除以及应该如何处理它，是你在面临学习java泛型时面临的最大障碍。
 */
class Frob {}
class Fnorkle {}
class Quark<Q> {}
class Particle<POSITION, MOMENTUM> {}

public class LostInformation {

    public static void main(String[] args) {
        List<Frob> list = new ArrayList<>();
        Map<Frob, Fnorkle> map = new HashMap<>();
        Quark<Fnorkle> quark = new Quark<>();
        Particle<Long, Double> p = new Particle<>();

        Log.vn(Arrays.toString(list.getClass().getTypeParameters()));
        Log.vn(Arrays.toString(map.getClass().getTypeParameters()));
        Log.vn(Arrays.toString(quark.getClass().getTypeParameters()));
        Log.vn(Arrays.toString(p.getClass().getTypeParameters()));
    }
}
